<?php

/* ユニットテストブロック */
/**
 * *ユニットテスト時以外で以下のコードを無効にする
 */
if (class_exists ( 'SimpleActionControllerTester' )) {
	/**
	 * テスト用にメソッドをオーバーライドしたモックアクションコントローラ
	 */
	class ControllerNameMoc extends ControllerName {
		/**
		 * ZendViewをパブリックアクセスできるようにする
		 * (non-PHPdoc)
		 * @see IndexController::init()
		 */
		public function init() {
			/* CLI起動はviewのインスタンスがないので自前で創る */
			if (! isset ( $this->view )) {
				$this->view = new stdClass ();
			}
			parent::init ();
		}
		/** リダイレクトをリダイレクト先検証用に書き換える
		 * (non-PHPdoc)
		 * @see Zend_Controller_Action::_redirect()
		 */
		public function _redirect($url) {
			GLOBAL $redirectUrl;
			$redirectUrl = $url;
		}
	}
	/* headerメソッドの機能を変更し発行ヘッダを評価できるようにする*/
	runkit_function_remove ( 'header' );
	$redirectUrl = '';
	function header($string) {
		GLOBAL $redirectUrl;
		$redirectUrl = $string;
	}
	/**
	 * simpletest UNIT TEST CASE
	 */
	class ControllerNameTest extends SimpleActionControllerTester {
		/**
		 * 被検アクションコントローラインスタンス作成
		 * (non-PHPdoc)
		 * @see SimpleActionControllerTester::setUp()
		 */
		public function setUp() {
			parent::setUp ();
			$this->controller = new ControllerNameMoc ( $this->_objRequest, $this->_objResponse, array () );
			$this->controller->init ();
		}
		/* ここまでが前準備でControllerNameを書き換えるだけの固定コード */
		/* *****************************************************/
		/**
		 * テンプレートに設定される値をテストする例
		 */
		public function test_example01() {
			$this->controller->indexAction ();
			$this->assertEqual ( $this->controller->view->name, '期待値' );
		}
		/**
		 * public ではないメソッドをテストする例
		 */
		public function test_example02() {
			$this->_invokeReflectionedMethod ( 'テストするメソッド名', '引数１', '引数２', '引数は5個まで' );
		}
		/**
		 * 外部クラスのメソッドを替え玉クラスのメソッドに入れ替える例
		 */
		public function test_example03() {
			$this->_switchClassMethod ( '外部クラス名', '外部クラスのメソッド名', '替え玉クラス名', '替え玉クラスのメソッド名' );
		}
	}
	/**
	 * 替え玉メソッドクラスの例（自由に実装してさしつかえない）
	 */
	class Relief_ControllerName {
		public function relief01() {
			return FALSE;
		}
	}
}
